package workforce.limousine.struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.sql.DataSource;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;

import limousine.vo.Users;
import limousine.vo.Role;
import limousine.dbservice.RoleService;
import limousine.util.Service;
import limousine.util.Token;
import limousine.util.Func;

public class RoleEdit extends Action {

    private String errorMsg = "Process Fail";
    private Func func = new Func();

    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        HttpSession session = request.getSession();
        System.out.println("***RoleEdit");

        Users user = (Users) session.getAttribute(Token.USER_SESSION);
        if (user == null) {
            System.out.println("--SESSION EXPIRE--");
            return mapping.findForward(Token.SESSION_EXPIRE);
        }
        /*if (!user.getRole_name().equals("Admin")) {
            System.out.println("--Not Admin Hack--");
            return mapping.findForward(Token.SESSION_EXPIRE);
        }*/

        //        DataSource ds = this.getDataSource(request, Token.DATASOURCE_NAME);
        Service service = new Service();
        service.setServletContext(this.getServlet().getServletContext());
        DataSource ds = service.getDataSource();
        service.removeMsgAttribute(request, session, "");

        DynaActionForm daf = (DynaActionForm) form;
       
        boolean success = saveData(daf, ds);
        if (success) {
            session.setAttribute(Token.MSG_USER,Token.MSG_UPDATE_SUCCESS);
            return mapping.findForward(Token.SUCCESS);
        } else {
            session.setAttribute(Token.MSG_ERROR, errorMsg);
            return mapping.findForward(Token.FAIL);
        }
    }

    private String checkEmptyString(String value) {// optimize data
        value = (value == null) ? "" : value.trim();
        return func.jsp2UTF(value);
    }

    public boolean saveData(DynaActionForm d, DataSource ds) {

        String id = d.getString("id");
        
        String name = d.getString("name");
        name = checkEmptyString(name);
        if (name.length() == 0) {
            errorMsg = "Not have name";
            return false;
        }

        String detail = d.getString("detail");
        detail = checkEmptyString(detail);
        if (detail.length() == 0) {
            errorMsg = "Not have detail";
            return false;
        }

        String enable = d.getString("enable");

        Role o = new Role();
        RoleService rs = new RoleService();
        rs.setDataSource(ds);
        //check Role name exist
        o = rs.getByName(name);
        if (o != null) {//exist
            if (!o.getId().equals(id.trim())) {
                errorMsg = "This Role exist";
                return false;
            }
        }
//		check Role name exist

        o = new Role();
        o.setId(id);
        o.setName(name);
        o.setDetail(detail);
        o.setEnable(enable);

        return rs.update(o);
    }
}
